
function GetRandomStr(data)

	local numstr=""
	for _,v in pairs(data) do
		if v.max==0 then
			numstr=numstr.."0"
		else
			numstr=numstr..tostring(math.random(v.min,v.max))
		end
	end

	return numstr
end

function GetRandomNumber(data)
	local digits=#data
	local str=GetRandomStr(data)
	--print("-字符串位数，实际位数--->",str,string.len(str),digits)
	str="1"..str
	local num=tonumber(str)
	return num-10^digits
end




function GetRandomBigNumber(num)
	if num<10000 then
		return math.random(0,num)
	end

	local numInt=math.floor(num) --去除小数点
	local numstr=tostring(numInt)

	local digit,first2Digit
	if string.find(numstr,"e+") then --如果已经达到科学计数
		local list=string.split(numstr,"e+") --切割
		digit=tonumber(list[2])+1--计算位数
		first2Digit=tostring(math.floor(list[1]*100)) --取前三位
	else
		digit=#numstr --获取位数
		first2Digit = string.sub(tostring(numstr), 1, 3)--获取前3位
	end


	local data={}
	local a1=string.sub(first2Digit, 1, 1) --第一位数
	local a2=string.sub(first2Digit, 2, 2)--第二位数
	local a3=string.sub(first2Digit, 3, 3) --第三位数

	--print("---------前三位---------位数------>",a1,a2,a3,digit)
	table.insert(data,{
		min=0,
		max=tonumber(a1),
	})

	table.insert(data,{
		min=0,
		max=tonumber(a2),
	})

	table.insert(data,{
		min=0,
		max=tonumber(a3),
	})

	for i=4,digit do
		table.insert(data,{
			min=0,
			max=9,
		})
	end

	return  GetRandomNumber(data)
end

local car_cfg=_G.CommonOHOH.config.Car


local M={}

function M.RandomLucky(probability,luck)

    luck=luck or 0

    local sum=0
    
	for k,p in pairs(probability) do
		sum=sum+p+luck
	end

    local a=math.random(0,sum)

    local s=0
	for k,p in pairs(probability) do
        s=s+p+luck
		if a<=s then
            return k
        end
	end

	return 1
end

function M.Roll(baseLuck,gradeLuck,grade)
    
    --计算权重上限
    local randMax=car_cfg.ProbabilitySum+baseLuck*car_cfg.PartCount
    local a=GetRandomBigNumber(randMax)

    local s=0
    local partId=0
	for _,data in pairs(car_cfg.Probability) do
         s=s+data.p+baseLuck
		if a<=s then
            partId=data.id
            break
        end
	end

    if partId==0 then
        local a=car_cfg.Probability[1].id
        warn("随机没找到部件，默认返回第一个partID",a)
        partId=a
    end

    if grade then --存在指定品阶，直接返回品阶
        return  partId,grade
    end
    local  r=math.random(0,10000)
    local s1=0
    local length=#gradeLuck

    for i=length,1,-1 do --倒序遍历(优先随机品阶高的)
        s1=s1+gradeLuck[i]
        if r <s1 then
            return partId,i
        end
        if i==1 then
            return partId,i
        end
    end

end


return M